/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package ms.jasim.model;

import java.util.List;

import ms.jasim.model.event.EventModel;
import ms.jasim.model.event.ModificationType;
import ms.jasim.model.items.ItemList;
import ms.jasim.model.items.PropertyDescriptor;
import ms.jasim.model.items.PropertyDescriptorList;
import ms.jasim.model.items.PropertyList;
import ms.jasim.pddl.PddlPredicate;
import ms.jasim.pddl.PddlProblem;
import ms.jasim.pddl.PddlSolution.PddlAction;

import org.eclipse.emf.common.util.URI;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Jasim Model</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link ms.jasim.model.JasimModel#getTitle <em>Title</em>}</li>
 *   <li>{@link ms.jasim.model.JasimModel#getMetric <em>Metric</em>}</li>
 *   <li>{@link ms.jasim.model.JasimModel#getActors <em>Actors</em>}</li>
 *   <li>{@link ms.jasim.model.JasimModel#getGoals <em>Goals</em>}</li>
 *   <li>{@link ms.jasim.model.JasimModel#getEvaluators <em>Evaluators</em>}</li>
 *   <li>{@link ms.jasim.model.JasimModel#getOptions <em>Options</em>}</li>
 *   <li>{@link ms.jasim.model.JasimModel#getEventModel <em>Event Model</em>}</li>
 *   <li>{@link ms.jasim.model.JasimModel#getDefaultActorProperties <em>Default Actor Properties</em>}</li>
 *   <li>{@link ms.jasim.model.JasimModel#getDefaultGoalProperties <em>Default Goal Properties</em>}</li>
 *   <li>{@link ms.jasim.model.JasimModel#getDefaultCapabilityProperties <em>Default Capability Properties</em>}</li>
 *   <li>{@link ms.jasim.model.JasimModel#getActorDescriptors <em>Actor Descriptors</em>}</li>
 *   <li>{@link ms.jasim.model.JasimModel#getGoalDescriptors <em>Goal Descriptors</em>}</li>
 *   <li>{@link ms.jasim.model.JasimModel#getCapabilityDescriptors <em>Capability Descriptors</em>}</li>
 * </ul>
 * </p>
 *
 * @see ms.jasim.model.ModelPackage#getJasimModel()
 * @model
 * @generated
 */
public interface JasimModel extends ModelObject {
	/**
	 * Returns the value of the '<em><b>Title</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Title</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Title</em>' attribute.
	 * @see #setTitle(String)
	 * @see ms.jasim.model.ModelPackage#getJasimModel_Title()
	 * @model
	 * @generated
	 */
	String getTitle();

	/**
	 * Sets the value of the '{@link ms.jasim.model.JasimModel#getTitle <em>Title</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Title</em>' attribute.
	 * @see #getTitle()
	 * @generated
	 */
	void setTitle(String value);

	/**
	 * Returns the value of the '<em><b>Metric</b></em>' attribute.
	 * The default value is <code>"maximize (rt_plan_quality)"</code>.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Metric</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Metric</em>' attribute.
	 * @see #setMetric(String)
	 * @see ms.jasim.model.ModelPackage#getJasimModel_Metric()
	 * @model default="maximize (rt_plan_quality)"
	 * @generated
	 */
	String getMetric();

	/**
	 * Sets the value of the '{@link ms.jasim.model.JasimModel#getMetric <em>Metric</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Metric</em>' attribute.
	 * @see #getMetric()
	 * @generated
	 */
	void setMetric(String value);

	/**
	 * Returns the value of the '<em><b>Actors</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Actors</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Actors</em>' containment reference.
	 * @see #setActors(ActorList)
	 * @see ms.jasim.model.ModelPackage#getJasimModel_Actors()
	 * @model containment="true"
	 * @generated
	 */
	ActorList getActors();

	/**
	 * Sets the value of the '{@link ms.jasim.model.JasimModel#getActors <em>Actors</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Actors</em>' containment reference.
	 * @see #getActors()
	 * @generated
	 */
	void setActors(ActorList value);

	/**
	 * Returns the value of the '<em><b>Goals</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Goals</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Goals</em>' containment reference.
	 * @see #setGoals(GoalList)
	 * @see ms.jasim.model.ModelPackage#getJasimModel_Goals()
	 * @model containment="true"
	 * @generated
	 */
	GoalList getGoals();

	/**
	 * Sets the value of the '{@link ms.jasim.model.JasimModel#getGoals <em>Goals</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Goals</em>' containment reference.
	 * @see #getGoals()
	 * @generated
	 */
	void setGoals(GoalList value);

	/**
	 * Returns the value of the '<em><b>Evaluators</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Evaluators</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Evaluators</em>' containment reference.
	 * @see #setEvaluators(EvaluatorList)
	 * @see ms.jasim.model.ModelPackage#getJasimModel_Evaluators()
	 * @model containment="true"
	 * @generated
	 */
	EvaluatorList getEvaluators();

	/**
	 * Sets the value of the '{@link ms.jasim.model.JasimModel#getEvaluators <em>Evaluators</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Evaluators</em>' containment reference.
	 * @see #getEvaluators()
	 * @generated
	 */
	void setEvaluators(EvaluatorList value);

	/**
	 * Returns the value of the '<em><b>Options</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Options</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Options</em>' containment reference.
	 * @see #setOptions(ItemList)
	 * @see ms.jasim.model.ModelPackage#getJasimModel_Options()
	 * @model containment="true"
	 * @generated
	 */
	ItemList getOptions();

	/**
	 * Sets the value of the '{@link ms.jasim.model.JasimModel#getOptions <em>Options</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Options</em>' containment reference.
	 * @see #getOptions()
	 * @generated
	 */
	void setOptions(ItemList value);

	/**
	 * Returns the value of the '<em><b>Event Model</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Event Model</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Event Model</em>' containment reference.
	 * @see #setEventModel(EventModel)
	 * @see ms.jasim.model.ModelPackage#getJasimModel_EventModel()
	 * @model containment="true"
	 * @generated
	 */
	EventModel getEventModel();

	/**
	 * Sets the value of the '{@link ms.jasim.model.JasimModel#getEventModel <em>Event Model</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Event Model</em>' containment reference.
	 * @see #getEventModel()
	 * @generated
	 */
	void setEventModel(EventModel value);

	/**
	 * Returns the value of the '<em><b>Default Actor Properties</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Default Actor Properties</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Default Actor Properties</em>' containment reference.
	 * @see #setDefaultActorProperties(PropertyList)
	 * @see ms.jasim.model.ModelPackage#getJasimModel_DefaultActorProperties()
	 * @model containment="true"
	 * @generated
	 */
	PropertyList getDefaultActorProperties();

	/**
	 * Sets the value of the '{@link ms.jasim.model.JasimModel#getDefaultActorProperties <em>Default Actor Properties</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Default Actor Properties</em>' containment reference.
	 * @see #getDefaultActorProperties()
	 * @generated
	 */
	void setDefaultActorProperties(PropertyList value);

	/**
	 * Returns the value of the '<em><b>Default Goal Properties</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Default Goal Properties</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Default Goal Properties</em>' containment reference.
	 * @see #setDefaultGoalProperties(PropertyList)
	 * @see ms.jasim.model.ModelPackage#getJasimModel_DefaultGoalProperties()
	 * @model containment="true"
	 * @generated
	 */
	PropertyList getDefaultGoalProperties();

	/**
	 * Sets the value of the '{@link ms.jasim.model.JasimModel#getDefaultGoalProperties <em>Default Goal Properties</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Default Goal Properties</em>' containment reference.
	 * @see #getDefaultGoalProperties()
	 * @generated
	 */
	void setDefaultGoalProperties(PropertyList value);

	/**
	 * Returns the value of the '<em><b>Default Capability Properties</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Default Capability Properties</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Default Capability Properties</em>' containment reference.
	 * @see #setDefaultCapabilityProperties(PropertyList)
	 * @see ms.jasim.model.ModelPackage#getJasimModel_DefaultCapabilityProperties()
	 * @model containment="true"
	 * @generated
	 */
	PropertyList getDefaultCapabilityProperties();

	/**
	 * Sets the value of the '{@link ms.jasim.model.JasimModel#getDefaultCapabilityProperties <em>Default Capability Properties</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Default Capability Properties</em>' containment reference.
	 * @see #getDefaultCapabilityProperties()
	 * @generated
	 */
	void setDefaultCapabilityProperties(PropertyList value);

	/**
	 * Returns the value of the '<em><b>Actor Descriptors</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Actor Descriptors</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Actor Descriptors</em>' reference.
	 * @see ms.jasim.model.ModelPackage#getJasimModel_ActorDescriptors()
	 * @model transient="true" changeable="false" volatile="true"
	 * @generated
	 */
	PropertyDescriptorList getActorDescriptors();

	/**
	 * Returns the value of the '<em><b>Goal Descriptors</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Goal Descriptors</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Goal Descriptors</em>' reference.
	 * @see ms.jasim.model.ModelPackage#getJasimModel_GoalDescriptors()
	 * @model transient="true" changeable="false" volatile="true"
	 * @generated
	 */
	PropertyDescriptorList getGoalDescriptors();

	/**
	 * Returns the value of the '<em><b>Capability Descriptors</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Capability Descriptors</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Capability Descriptors</em>' reference.
	 * @see ms.jasim.model.ModelPackage#getJasimModel_CapabilityDescriptors()
	 * @model transient="true" changeable="false" volatile="true"
	 * @generated
	 */
	PropertyDescriptorList getCapabilityDescriptors();

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model kind="operation" dataType="ms.jasim.model.URI"
	 * @generated
	 */
	URI getURI();

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model uriDataType="ms.jasim.model.URI"
	 * @generated
	 */
	void setURI(URI uri);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	PropertyDescriptor findPropertyDescriptor(Class<?> clazz, String nameOrPddlFunction);

	PddlProblem generatePddlProblem();

	void reflectFinishedAction(PddlAction act);

	List<Object[]> getPostProcessCommand();

	void addPostCommand(ModificationType addFact, PddlPredicate pddlPredicate);

	void setInconsistent(boolean b);
	
	boolean isInconsistent();

} // JasimModel
